package com.shuyuansystem.dao;

import com.shuyuansystem.pojo.OrderInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

@Mapper
public interface OrderInfoMapper {
    /**
     * 插入订单信息
     * @param orderInfo 订单信息对象
     */
    void insertOrderInfo(OrderInfo orderInfo);

    /**
     * 更新订单信息
     * @param orderInfo 订单信息对象
     */
    void updateOrderInfo(OrderInfo orderInfo);

    /**
     * 根据订单关系查询订单信息
     * @param orderInfo 订单信息对象，包含用户 ID、商家 ID 和订单号
     * @return 订单信息对象
     */
    OrderInfo getOrderInfoByRelation(OrderInfo orderInfo);

    /**
     * 更新订单状态
     * @param merchantOrderNumber 商户订单号
     * @param orderStatus 订单状态
     * @param paymentTime 支付时间
     */
    void updateOrderStatus(@Param("merchantOrderNumber") String merchantOrderNumber,
                           @Param("orderStatus") String orderStatus,
                           @Param("paymentTime") java.sql.Timestamp paymentTime);

    /**
     * 更新订单状态、支付时间和支付宝交易号
     * @param orderInfo 订单信息对象
     */
    void updateOrderStatus(OrderInfo orderInfo);

    OrderInfo getOrderInfoByMerchantOrderNumber(String merchantOrderNumber);

    // 检查是否存在相同用户和商家的未支付订单
    List<OrderInfo> checkUnpaidOrderExists(@Param("userId") String userId, @Param("merchantId") String merchantId, @Param("orderStatus") String orderStatus);

    // 新增方法：检查是否存在相同 userId、merchantId、总价格且订单状态为未支付的订单
    List<OrderInfo> checkDuplicateUnpaidOrder(@Param("userId") String userId, @Param("merchantId") String merchantId, @Param("totalPrice") BigDecimal totalPrice, @Param("orderStatus") String orderStatus);

    // 新增方法：根据 userId 查找对应的订单
    /**
     * 根据商家 ID 查询订单信息
     * @param merchantId 商家 ID
     * @return 订单信息列表
     */
    List<OrderInfo> getOrderInfoByMerchantId(@Param("merchantId") String merchantId);
    int updateOrderStatusToProducing(@Param("merchantOrderNumber") String merchantOrderNumber);
    // 新增方法，用于更新 video_url 字段
    int updateVideoUrl(@Param("merchantOrderNumber") String merchantOrderNumber, @Param("videoUrl") String videoUrl);

    int updateTransactionStatusToShipping(String orderNumber);
    void deleteByProductId(Integer productId);

    List<OrderInfo> getAllByUserId(String userId);
    /**
     * 根据商家订单号删除订单信息
     * @param merchantOrderNumber 商家订单号
     * @return 删除的记录数
     */
    int deleteByMerchantOrderNumber(@Param("merchantOrderNumber") String merchantOrderNumber);

    // 更新订单状态
    void updateOrderStatusRefundOrder(OrderInfo orderInfo);
    List<OrderInfo> getAllByMerchantId(String MerchantId);
    /**
     * 根据商家 ID 获取对应的 video_url 列表
     * @param MerchantOrderNumber ID
     * @return video_url 列表
     */
    List<String> getVideoUrlsByMerchantOrderNumber(@Param("MerchantOrderNumber") String MerchantOrderNumber);

    int updateOrderStatusToCompleted(@Param("merchantOrderNumber") String merchantOrderNumber);
}